﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    /// <summary>
    /// Коллекция цветов
    /// </summary>
    public class ColorsCollection : AbstractCollection
    {
        /// <summary>
        /// Список цветов
        /// </summary>
        public List<Colors> ColorsList
        {
            get { return Entities.Colors.ToList(); }
        }

        /// <summary>
        /// список активных объектов
        /// </summary>
        public List<Colors> ColorsActiveList
        {
            get { return Entities.Colors.Where(c => c.IsActive).ToList(); }
        }

        /// <summary>
        /// Получение цвета по идентификатору
        /// </summary>
        /// <param name="colorId">Идентификатор</param>
        /// <returns>Цвет</returns>
        public Colors GetColorById(int colorId)
        {
            return GetItemById(colorId) as Colors;
        }

        /// <summary>
        /// Получение цвета по названию в САП
        /// </summary>
        /// <param name="sapId">Название САП</param>
        /// <returns>Цвет</returns>
        public Colors GetColorBySAPId(string sapId)
        {
            return Entities.Colors.FirstOrDefault(color => color.NameSAP == sapId);
        }

        /// <summary>
        /// Получение цвета по названию
        /// </summary>
        /// <param name="colorName"></param>
        /// <returns></returns>
        public Colors GetColorByName(string colorName)
        {
            return GetItemByName(colorName) as Colors;
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(ColorsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (Colors);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.Colors.Find(itemId);
        }

        #endregion

        #region Implementation of IAddDeleteUpdate

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newColor = (Colors) item;
            if (newColor == null)
                return false;


            var color4Update = GetItemByIdFromDatabase(newColor.IdColor) as Colors;

            if (color4Update == null)
                return true;

            if (!string.IsNullOrEmpty(newColor.NameEn))
                color4Update.NameEn = newColor.NameEn;

            if (!string.IsNullOrEmpty(newColor.NameRu))
                color4Update.NameRu = newColor.NameRu;

            color4Update.IsActive = newColor.IsActive;

            if (!string.IsNullOrEmpty(newColor.NameSAP))
                color4Update.NameSAP = newColor.NameSAP;

            return base.Update(color4Update, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}